import random
import string
from PIL import Image,ImageDraw,ImageFont,ImageFilter


#生成随机字符（字母+数字）
def rndChar(char_length):
    return random.sample((string.ascii_letters+string.digits),char_length)

#生成随机颜色
def rndColor():
    return (random.randint(0,255),random.randint(10,255),random.randint(64,255))

def gen_img_and_text(width=120,height=32,char_length=4,font_file='C:\Windows\Fonts\Arial.ttf',font_size=28):
    code=[]
    img=Image.new(mode='RGB',size=(width,height),color=(255,255,255))
    draw=ImageDraw.Draw(img,mode='RGB')

    #写文字
    font = ImageFont.truetype(font_file, font_size)
    char_list = rndChar(char_length)

    for i in range(char_length):
        h=random.randint(0,4)
        draw.text([i*width/char_length,h],char_list[i],font=font,fill=rndColor())

    #写干扰点
    #foriinrange(40):
    #draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor())

    #写干扰圆圈
    #foriinrange(40):
    #draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor())
    #x=random.randint(0,width)
    #y=random.randint(0,height)
    #draw.arc((x,y,x+4,y+4),0,90,fill=rndColor())

    #画干扰线
    #foriinrange(5):
    #x1=random.randint(0,width)
    #y1=random.randint(0,height)
    #x2=random.randint(0,width)
    #y2=random.randint(0,height)
    #
    #draw.line((x1,y1,x2,y2),fill=rndColor())

    img=img.filter(ImageFilter.EDGE_ENHANCE_MORE)
    return ''.join(char_list), img

if __name__ == '__main__':
    #1.直接打开
    # code, img=gen_img_and_text()
    # img.show()

    #2.写入文件
    code, img=gen_img_and_text()
    print(code)
    with open('code.png','wb') as f:
        img.save(f,format='png')
    #
    ##3.写入内存(Python3)
    #fromioimportBytesIO
    #stream=BytesIO()
    #img.save(stream,'png')
    #stream.getvalue()
